package com.zenithmind.version.pojo.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 合并请求VO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "合并请求VO")
public class MergeRequestVO {

    /**
     * 合并请求ID
     */
    @Schema(description = "合并请求ID")
    private String id;

    /**
     * 仓库ID
     */
    @Schema(description = "仓库ID")
    private String repositoryId;

    /**
     * 仓库名称
     */
    @Schema(description = "仓库名称")
    private String repositoryName;

    /**
     * 标题
     */
    @Schema(description = "标题")
    private String title;

    /**
     * 描述
     */
    @Schema(description = "描述")
    private String description;

    /**
     * 源分支
     */
    @Schema(description = "源分支")
    private String sourceBranch;

    /**
     * 目标分支
     */
    @Schema(description = "目标分支")
    private String targetBranch;

    /**
     * 状态
     */
    @Schema(description = "状态")
    private Integer status;

    /**
     * 状态名称
     */
    @Schema(description = "状态名称")
    private String statusName;

    /**
     * 作者ID
     */
    @Schema(description = "作者ID")
    private String authorId;

    /**
     * 作者名称
     */
    @Schema(description = "作者名称")
    private String authorName;

    /**
     * 指派人ID
     */
    @Schema(description = "指派人ID")
    private String assigneeId;

    /**
     * 指派人名称
     */
    @Schema(description = "指派人名称")
    private String assigneeName;

    /**
     * 合并提交ID
     */
    @Schema(description = "合并提交ID")
    private String mergeCommitId;

    /**
     * 合并者ID
     */
    @Schema(description = "合并者ID")
    private String mergedBy;

    /**
     * 合并者名称
     */
    @Schema(description = "合并者名称")
    private String mergedByName;

    /**
     * 合并时间
     */
    @Schema(description = "合并时间")
    private LocalDateTime mergedAt;

    /**
     * 关闭者ID
     */
    @Schema(description = "关闭者ID")
    private String closedBy;

    /**
     * 关闭者名称
     */
    @Schema(description = "关闭者名称")
    private String closedByName;

    /**
     * 关闭时间
     */
    @Schema(description = "关闭时间")
    private LocalDateTime closedAt;

    /**
     * 关闭原因
     */
    @Schema(description = "关闭原因")
    private String closeReason;

    /**
     * 重新打开者ID
     */
    @Schema(description = "重新打开者ID")
    private String reopenedBy;

    /**
     * 重新打开时间
     */
    @Schema(description = "重新打开时间")
    private LocalDateTime reopenedAt;

    /**
     * 变更文件数
     */
    @Schema(description = "变更文件数")
    private Integer changedFiles;

    /**
     * 新增行数
     */
    @Schema(description = "新增行数")
    private Integer addedLines;

    /**
     * 删除行数
     */
    @Schema(description = "删除行数")
    private Integer deletedLines;

    /**
     * 提交数量
     */
    @Schema(description = "提交数量")
    private Integer commitCount;

    /**
     * 是否有冲突
     */
    @Schema(description = "是否有冲突")
    private Boolean hasConflicts;

    /**
     * 是否可自动合并
     */
    @Schema(description = "是否可自动合并")
    private Boolean canAutoMerge;

    /**
     * 审核状态
     */
    @Schema(description = "审核状态")
    private String reviewStatus;

    /**
     * 审核者列表
     */
    @Schema(description = "审核者列表")
    private List<Object> reviewers;

    /**
     * 标签列表
     */
    @Schema(description = "标签列表")
    private List<String> labels;

    /**
     * 里程碑
     */
    @Schema(description = "里程碑")
    private String milestone;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    private LocalDateTime updateTime;

    /**
     * 是否可编辑
     */
    @Schema(description = "是否可编辑")
    private Boolean canEdit;

    /**
     * 是否可合并
     */
    @Schema(description = "是否可合并")
    private Boolean canMerge;

    /**
     * 是否可关闭
     */
    @Schema(description = "是否可关闭")
    private Boolean canClose;
}
